/*******************************************************************************
 * Copyright 2019 Samsung Electronics All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 *******************************************************************************/

// Package cipher implements simple encrypting and decrypting message
package cipher

const logPrefix = "cipher"

// IEdgeCipherer is the interface implemented by encryption/decryption functions
type IEdgeCipherer interface {
	EncryptByte(byteData []byte) (encryptedByte []byte, err error)
	EncryptJSONToByte(jsonMap map[string]interface{}) (encryptedByte []byte, err error)
	DecryptByte(byteData []byte) (decryptedByte []byte, err error)
	DecryptByteToJSON(data []byte) (jsonMap map[string]interface{}, err error)
}

// Setter interface
type Setter interface {
	SetCipher(cipher IEdgeCipherer)
}

// HasCipher struct
type HasCipher struct {
	IsSetKey bool
	Key      IEdgeCipherer
}

// SetCipher function
func (h *HasCipher) SetCipher(cipher IEdgeCipherer) {
	h.Key = cipher
	h.IsSetKey = true
}
